package com.yingside.annotation.actionlistener;

import java.awt.event.ActionListener;
import java.lang.reflect.Field;

import javax.swing.AbstractButton;

public class ButtonActionListener {
	
	public static void bind(Object obj) throws IllegalArgumentException, IllegalAccessException, InstantiationException {
		//获取反射对象
		Class<?> clazz = obj.getClass();
		//获取所有属性的反射
		Field [] fields = clazz.getDeclaredFields();
		
		//循环所有属性,判断是否是一个按钮
		for (Field field : fields) {
			//将属性设置为可以自由访问,因为private修饰的在其他类不能访问
			//但是反射可以
			field.setAccessible(true);
			
			//直接获取属性上的注解
			ActionListenerAnnotation a = 
					field.getAnnotation(ActionListenerAnnotation.class);
			
			//获取属性的值
			//这里的意思是通过反射获取属性具体的对象
			Object fieldValue = field.get(obj);
			
			if(a != null && fieldValue instanceof AbstractButton) {
				//获取事件的反射
				Class<? extends ActionListener> actionListenerCLazz = a.listener();
				//通过反射获取具体对象
				ActionListener actionListener = actionListenerCLazz.newInstance();
				AbstractButton button = (AbstractButton)fieldValue;
				//给按钮加上事件
				button.addActionListener(actionListener);
			}
			
		}
		
	}
}
